package model

import (
	"gorm.io/gorm"
	"micro-chat/config"
	"time"
)

type FriendApply struct {
	Id          uint32         `gorm:"column:id;type:int UNSIGNED;comment:好友申请ID;primaryKey;not null;" json:"id"`                                // 好友申请ID
	FormUserId  int32          `gorm:"column:form_user_id;type:int;comment:申请人ID;not null;" json:"form_user_id"`                                 // 申请人ID
	ToUserId    int32          `gorm:"column:to_user_id;type:int;comment:被申请人ID;not null;" json:"to_user_id"`                                    // 被申请人ID
	ApplyReason string         `gorm:"column:apply_reason;type:varchar(200);comment:申请理由;not null;" json:"apply_reason"`                         // 申请理由
	Status      int8           `gorm:"column:status;type:tinyint;comment:申请状态: 0:待审核 1:已同意 2:已拒绝;not null;default:0;" json:"status"`             // 申请状态: 0:待审核 1:已同意 2:已拒绝
	CreatedAt   time.Time      `gorm:"column:created_at;type:datetime(3);comment:创建时间;not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"` // 创建时间
	UpdatedAt   time.Time      `gorm:"column:updated_at;type:datetime(3);comment:更新时间;not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"` // 更新时间
	DeletedAt   gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}
type FriendRelation struct {
	Id         uint32         `gorm:"column:id;type:int UNSIGNED;comment:好友关系ID;primaryKey;not null;" json:"id"`                                // 好友关系ID
	UserId     int32          `gorm:"column:user_id;type:int;comment:用户ID;not null;" json:"user_id"`                                            // 用户ID
	FriendId   int32          `gorm:"column:friend_id;type:int;comment:好友ID;not null;" json:"friend_id"`                                        // 好友ID
	RemarkName string         `gorm:"column:remark_name;type:varchar(50);comment:好友备注;default:NULL;" json:"remark_name"`                        // 好友备注
	GroupName  string         `gorm:"column:group_name;type:varchar(20);comment:好友分组;default:NULL;" json:"group_name"`                          // 好友分组
	Tag        string         `gorm:"column:tag;type:varchar(100);comment:好友标签: 多个标签使用,分隔;default:NULL;" json:"tag"`                            // 好友标签: 多个标签使用,分隔
	Status     int8           `gorm:"column:status;type:tinyint;comment:申请状态: 0:待审核 1:已同意 2:已拒绝;not null;default:0;" json:"status"`             // 申请状态: 0:待审核 1:已同意 2:已拒绝
	CreatedAt  time.Time      `gorm:"column:created_at;type:datetime(3);comment:创建时间;not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"` // 创建时间
	UpdatedAt  time.Time      `gorm:"column:updated_at;type:datetime(3);comment:更新时间;not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"` // 更新时间
	DeletedAt  gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (a *FriendApply) TableName() string {
	return "friend_apply"
}

func (r *FriendRelation) TableName() string {
	return "friend_relation"
}

// 申请发送
func (a *FriendApply) SendApply() error {
	return config.DB.Create(&a).Error
}

// 查看
func (a *FriendApply) FindApply(userId int32) (list []*FriendApply, err error) {
	err = config.DB.
		Where("to_user_id = ? and status = 0", userId).
		Find(&list).Error
	return
}

// 处理申请  0:待审核 1:已同意 2:已拒绝
func (a *FriendApply) UpdateApply() error {
	return config.DB.Updates(&a).Error
}

// 好友列表
func (r *FriendRelation) ListFriend(id int32) (list []*FriendRelation, err error) {
	err = config.DB.
		Where("friend_id = ?", id).
		Find(&list).Error
	return
}
